package listbyorder.access001_100.test4;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/6 14:07
 */
public class Solution1 {

    // 解法一： 创建辅助数组，将两个数组中的元素按照顺序加入数组，最终返回中间值即可
    // 时间复杂度（m + n）
    // 空间复杂度(m + n)
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        // 创建辅助数据
        int[] nums;
        int m = nums1.length;
        int n = nums2.length;
        if (m == 0) {
            // 如果nums1为空
            if (n % 2 == 0) {
                // 如果nums2元素个数为偶数
                return (nums2[n / 2] + nums2[(n / 2) - 1]) / 2.0;
            } else {
                return nums2[n / 2];
            }
        }
        if (n == 0) {
            // 如果nums2为空
            if (m % 2 == 0) {
                return (nums1[m / 2] + nums1[(m / 2) - 1]) / 2.0;
            } else {
                return nums1[m / 2];
            }
        }
        // 如果都不为空
        nums = new int[m + n];
        int index = 0;
        int c1 = 0;
        int c2 = 0;
        while (index < m + n) {
            if (c1 == m) {
                while (c2 != n) {
                    nums[index++] = nums2[c2++];
                }
                break;
            }
            if (c2 == n) {
                while (c1 != m) {
                    nums[index++] = nums1[c1++];
                }
                break;
            }
            if (nums1[c1] < nums2[c2]) {
                nums[index++] = nums1[c1++];
            } else {
                nums[index++] = nums2[c2++];
            }
        }
        if (index % 2 == 0) {
            return (nums[index / 2] + nums[(index / 2) - 1]) / 2.0;
        } else {
            return nums[index / 2];
        }
    }
}
